package com.smart.nine.spel.expr.method;

import com.smart.nine.spel.expr.User;
import org.springframework.beans.support.PagedListHolder;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

/**
 * 方法解析
 *
 * @author junrui.wang
 * @create 2019/3/27
 */
public class MethodExprSample {
    public static void main(String[] args) {
        User user = new User();
        ExpressionParser expressionParser = new SpelExpressionParser();
        EvaluationContext context = new StandardEvaluationContext(user);

        //可以用String的所有方法对文本进行操作
        String subString = expressionParser.parseExpression("'Spel expr'.substring(5)").getValue(context, String.class);
        System.out.println(subString);
        Integer index = expressionParser.parseExpression("'Spel expr'.indexOf('Spel')").getValue(context, Integer.class);
        System.out.println(index);

        //调用公共方法
        Boolean data1 = expressionParser.parseExpression("validatePassword('123456')").getValue(context, Boolean.class);
        System.out.println(data1);
        //调用私有方法，将发生错误（方法解析不支持私有方法）
        //Boolean data2 = expressionParser.parseExpression("validatePassword2('123456')").getValue(context, Boolean.class);
        //System.out.println(data2);
        //调用静态方法
        Boolean data3 = expressionParser.parseExpression("validatePassword3('123456')").getValue(context, Boolean.class);
        System.out.println(data3);

        //调用可变参数方法
        Boolean isAdd = expressionParser.parseExpression("addInterests('a','b')").getValue(context, Boolean.class);
        System.out.println(isAdd);

    }
}
